package com.cskaoyan.javase.other._0date;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * Date类虽然确实可以用于表示时间
 * 但显然这种日期格式和我们生活中的日期格式相去甚远。
 * 为了以更贴近生活中的方式去描述时间
 * 实现直接把一个字符串转换成Java中Date对象的需求，所以我们需要使用Java中的日期格式类。
 *
 * java.text.DateFormat是日期和时间格式化子类的抽象父类，它能够以自定义的格式解析或者格式化日期和时间
 * 实际开发中多使用它的子类java.text.SimpleDateFormat来实现Date对象和日期字符串的相互转换。
 *
 * 强调: 日期格式类仅用来表示日期的格式,它可以将Date对象和表示日期的字符串互相转换
 * 它本身无法表示日期,表示日期仍然依赖于Date对象
 *
 *
 * 构造器：
 * // 以传入的字符串格式进行解析或者格式化日期
 * public SimpleDateFormat(String pattern)
 *
 * 该构造器的参数pattern用来表示日期字符串的格式，但这个格式不是乱写的，请参考以下格式：
 * y：表示年，例如yyyy，表示千年年份
 * M：表示月份，例如MM，表示月份（最多12，两位数）
 * d：表示月份中的天数，例如dd，表示天数（最多31，两位数）
 * H：表示一天中的小时数，例如HH，表示小时数（最多24，两位数）
 * m：表示小时中的分钟数，例如mm，表示分钟数（最大59，两位数）
 * s：表示分钟里的秒数，例如ss，表示秒数（最大59，两位数）
 *
 * @since 10:51
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo2 {
    public static void main(String[] args) throws ParseException {

        Date currentTime = new Date();

        // 该构造器传入一个表示日期处理格式的字符串
        // 这里想按照"2020-02-02 10:30:00"格式处理日期
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        // 将Date对象转换成对应日期字符串表示，该方法需要传入一个Date对象，然后返回一个日期字符串String对象。
        // 这个过程，一般称呼为“格式化”，使用以下方法：
        // public final String format(Date date)
        String date = sdf.format(currentTime);
        System.out.println(date);


        // 将日期表示的字符串转换成对应的Date对象，该方法需要传入一个“按照pattern格式编写的日期字符串”，然后返回一个Date对象。
        // 这个过程，一般称呼为“解析”，使用以下方法：
        // public Date parse(String source)
        Date d2 = sdf.parse("2020-02-02 10:30:00");
        System.out.println(d2);
    }
}
